package object_;

public class Equals01 {
    public static void main(String[] args) {
//        //equals针对引用类型，判断的是是否指向同一块对象空间
//        A a = new A();
//        A b = new A();
//        A c = b; // c和b指向同一块空间
//        System.out.println(a == c); // false
//        System.out.println(b == c); // true
//
//        B bobj = c; // 把一个子类的对象，赋给一个父类的引用，向上转型
//        System.out.println(bobj == b);//true
//
//        int num1 = 10;
//        double num2 = 10.0;
//        System.out.println(num1 == num2); // 基本数据类型，判断值是否相等

        /*
        public boolean equals(Object anObject) { // 只要是对象，就可以传
        if (this == anObject) { // 如果是同一个对象
            return true;
        }
        if (anObject instanceof String) { // 判断类型
            String anotherString = (String)anObject; // 向下转型
            int n = value.length;
            if (n == anotherString.value.length) { // 如果字符串长度相等
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) { // 一个一个比较字符
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true; // 如果两个字符串的所有字符都相同，则返回true
            }
        }
        return false;
    }
         */

        //再看看Object的equals方法
        //Object的equals方法默认就是比较对象地址是否相同
        /*
            public boolean equals(Object obj) {
                return (this == obj); // 两个引用，判断的是是否指向同一块空间
            }
         */

        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1.equals(s2));


        //Integer也重写了Object的equals方法，
        //变成了判断两个值是否相等
        /*
            public boolean equals(Object obj) {
                if (obj instanceof Integer) {
                    return value == ((Integer)obj).intValue();
                }
                return false;
            }
         */
        Integer integer1 = new Integer(5);
        Integer integer2 = new Integer(5);
        System.out.println(integer1.equals(integer2)); // true
        System.out.println(integer1 == integer2); // false
    }
}

class B{}

class A extends B{

}